package gui.nastaveni;

import java.awt.event.ActionEvent;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import utils.Nastroje;

import model.NastaveniUlohy;

public class NastaveniDialog extends JDialog {

    private static final long serialVersionUID = 1L;
    private JSlider slRozdeleni = new JSlider();
    private JCheckBox chZakryvat;
    private JLabel lRozdeleni = new JLabel("Počet položek na obrázku: ");
    private NastaveniUlohy nastaveni;


    public NastaveniDialog(NastaveniUlohy nastaveni) {
	this.nastaveni = nastaveni;
	createComponents();
    }


    private void createComponents() {
	// zda pri spatne odpovedi zakryt policko
	chZakryvat = new JCheckBox(new AbstractAction("zakrývat políčka") {

	    private static final long serialVersionUID = 1L;


	    @Override
	    public void actionPerformed(ActionEvent e) {
		zmenaZakryvani();
	    }
	});
	chZakryvat.setToolTipText("Zakrývat obrázek při špatné odpovědi");
	// nastaveni dilu obrazku
	slRozdeleni.setMinimum(1);
	slRozdeleni.setMinorTickSpacing(1);
	slRozdeleni.setPaintTicks(true);
	slRozdeleni.setMaximum(10);
	slRozdeleni.setValue(nastaveni.getPocetDiluObrazku() / 5);
	slRozdeleni.setToolTipText("Nastav počet políček, na který bude rozdělen obrázek.");
	slRozdeleni.addChangeListener(new ChangeListener() {

	    public void stateChanged(ChangeEvent evt) {
		zmenaPoctuDiluObrazku();
	    }
	});
	// popisek
	lRozdeleni.setFont(Nastroje.fMaly);
	lRozdeleni.setText(lRozdeleni.getText() + getPocetDiluObrazku());
	// zavreni okna
	JButton btnZavrit = new JButton(new AbstractAction("Zavřít") {

	    private static final long serialVersionUID = 1L;


	    @Override
	    public void actionPerformed(ActionEvent arg0) {
		setVisible(false);
	    }
	});
	GroupLayout layout = new GroupLayout(this.getContentPane());
	layout.setAutoCreateGaps(true);
	layout.setAutoCreateContainerGaps(true);
	this.getContentPane().setLayout(layout);
	layout.setHorizontalGroup(layout.createSequentialGroup().addGroup(
		layout.createParallelGroup(GroupLayout.Alignment.LEADING)
			.addComponent(chZakryvat, Alignment.LEADING)
			.addComponent(slRozdeleni, Alignment.CENTER)
			.addComponent(lRozdeleni, Alignment.CENTER)
			.addComponent(btnZavrit, Alignment.CENTER)));
	layout.setVerticalGroup(layout.createSequentialGroup().addGroup(
		layout.createSequentialGroup()
			.addComponent(chZakryvat)
			.addGap(10)
			.addComponent(slRozdeleni)
			.addComponent(lRozdeleni)
			.addGap(30)
			.addComponent(btnZavrit)));
	this.pack();
	this.setModal(true);
	this.setLocationRelativeTo(null);
	this.setTitle("Nastavení");
    }


    /**
     * Provede akci po zmene poctu na ktery bude obrazek rozdelen
     */
    private void zmenaPoctuDiluObrazku() {
	lRozdeleni.setText("Počet políček na obrázku: " + getPocetDiluObrazku());
	this.nastaveni.setPocetDiluObrazku(getPocetDiluObrazku());
    }


    /**
     * Provede akci po zmene zakryvani obrazku
     */
    private void zmenaZakryvani() {
	nastaveni.setSkryvat(chZakryvat.isSelected());
    }


    /**
     * Vrati pocet dilu rozdeleni obrazku
     * @return
     */
    private int getPocetDiluObrazku() {
	return this.slRozdeleni.getValue() * 5;
    }
}
